iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0

TensorFlow核心

主旨:了解 TensorFlow 的核心元件和實際操作 TensorFlow

在這個子系列課程,我們將學到:

  • 撰寫惰性求值(Lazy Evaluation)和指令式編程(Imperative programming)
  • 使用Graph、Session和Variable
  • 視覺化TensorFlow的Graph
  • TensorFlow程式的除錯

什麼是TensorFlow?

TensorFlow是Google一開源、使用有向無環圖(Directed Acyclic Graph, DAG) 做高效速值計算的函式庫,它不只可以拿來做ML,還可以用來做任何使用GPU的數值運算

那麼“TensorFlow”這個名字是怎麼來的呢?首先我們要先了解什麼是tensor。根據數值資料的維度,可以將其種類分為:

  1. 純量(Scalar):0-維
  2. 向量(Vector):1-維
  3. 矩陣(Matrix):2-維
  4. 張量(Tensor):3-維以上

flow代表著這些資料流進這個有向無環圖,這就是為什麼叫做“TensorFlow”。

但使用有向無環圖有什麼優點嗎?答案是有的,使用這樣的架構,就不會限制只能使用Python,你可以將模型訓練完後,轉換到C++上做快速低延遲(Latency)的預測,此外還可以在不同硬體間作轉換(如電腦到手機),所以可攜帶性(Portability)就是其最大的優點

TensorFlow API 的階層

下圖是TensorFlow API 的階層,最底層是跟要執行TensorFlow硬體種類有關的,對於一般使用者大概都是使用最上面兩層。

那所謂惰性求值(Lazy Evaluation) 的意思是什麼呢?下面的圖就說明了這個概念:當程式執行到 c = tf.add(a,b) 的時候,並不會直接計算出變數c的值,而是先建立有向無環圖,建好後,計算的部分是在執行 session.run(c, feed_dict=...) 的部分。

雖然說TensorFlow預設是惰性求值,但是如果你需要除錯的話,也可以改成急切模式(Eager mode),下圖是一個例子。

Graph和Session

TensorFlow使用有向無環圖,可以在建構圖的時候做分析,將可合併的計算合併,加快計算效率

此外,在模型建構時,如果需要把計算圖視覺化的話,也可以使用TensorBoard工具,

下面是使用TensorBoard的例圖,我們將模型用 tf.summary.FileWriter() 寫出後,就可以在TensorBoard平台上面做模型視覺化:

Tensor 和 Variable

前面簡單有講到Tensor和維度的關係,下表把它更清楚的列出來。

在TensorFlow,我們還可以將tensor做切分,類似numpy array一樣,也可以做 tf.reshape()

而模型在建構的時候,免不了要定義參數,下面是將w定義為 tf.get_variable() 的方式:

另外還有一種變數型態稱為 Placeholder,其概念就是定義完之後,不需要馬上賦予其值,等到執行後需要計算到它再給值便可。

這邊特別要了解的是 variable 和 placeholder 在概念上是不同的東西,最大的差異點就是在定義當下需不需要賦予其值


今天介紹了TensorFlow 的核心元件,明天我們將透過實作來了解 “TensorFlow API如何運作”。


上一篇
鐵人賽Day10 - Launching into Machine Learning (4/4)
下一篇
鐵人賽Day12 - Intro to TensorFlow (2/6)
系列文
Machine Learning with TensorFlow on Google Cloud Platform30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言